using ItemHelperLib.Define;
using ItemStatsSystem;
using ReflectHelperLib.Helper;

namespace ItemHelperLib.Util
{
    // Item辅助类 - 提供Item对象的属性操作方法
    public static class ItemHelper
    {
        // ==================== 设置属性方法 ====================
        
        // 设置Item的属性值（使用字符串）
        public static bool SetItemProperty(Item item, string propertyName, object value)
        {
            return ReflectHelper.SetMemberValue(item, propertyName, value);
        }

        // 设置Item的可获取属性值（推荐：优先使用公共属性）
        public static bool SetItemProperty(Item item, ItemGettableProperty property, object value)
        {
            return ReflectHelper.SetMemberValue(item, property.ToString(), value);
        }

        // 设置Item的可设置属性值（推荐：使用公共setter）
        public static bool SetItemProperty(Item item, ItemSettableProperty property, object value)
        {
            return ReflectHelper.SetMemberValue(item, property.ToString(), value);
        }

        // 设置Item的私有字段值（使用反射，性能较低）
        public static bool SetItemProperty(Item item, ItemPrivateField field, object value)
        {
            return ReflectHelper.SetMemberValue(item, field.ToString(), value);
        }

        // ==================== 获取属性方法 ====================

        // 获取Item的属性值（使用字符串）
        public static object? GetItemProperty(Item item, string propertyName)
        {
            return ReflectHelper.GetMemberValue(item, propertyName);
        }

        // 获取Item的可获取属性值（推荐：使用公共getter）
        public static object? GetItemProperty(Item item, ItemGettableProperty property)
        {
            return ReflectHelper.GetMemberValue(item, property.ToString());
        }

        // 获取Item的可设置属性值
        public static object? GetItemProperty(Item item, ItemSettableProperty property)
        {
            return ReflectHelper.GetMemberValue(item, property.ToString());
        }

        // 获取Item的私有字段值（使用反射，性能较低）
        public static object? GetItemProperty(Item item, ItemPrivateField field)
        {
            return ReflectHelper.GetMemberValue(item, field.ToString());
        }
    }
}